package com.techsoft;

import java.sql.Connection;

public interface ConnectionPool {
	public static String MAXPOOLLIMIT = "已达到最大的连接数限制， 不能再取得连接";
	public static String DATABASEERROR = "不能从数据库中取得任何连接";
	public static String POOLSTARTERROR = "连接池启动错误， 请检查连接池参数!";

	/**
	 * @return 取得连接
	 * @throws ConnectionPoolException
	 */
	public Connection getConnection() throws ConnectionPoolException;

	/**
	 * @param 取得与数据库相关的连接
	 *            ， 通过此方法可以最大限度的利用数据库特定的功能
	 * @return
	 * @throws Exception
	 */
	public Connection getNativeConnection(Connection conn)
			throws ConnectionPoolException;

	/**
	 * 启动连接池
	 * 
	 * @throws Exception
	 */
	public void start() throws ConnectionPoolException;

	/**
	 * @return 关闭连接池
	 * 
	 * @throws Exception
	 */
	public void shutdown() throws ConnectionPoolException;

	/**
	 * 取得连接池连接的数据库类型
	 * 
	 * @throws Exception
	 */
	public DatabaseType getDatabaseType();

	/**
	 * 设置连接池连接的数据库类型
	 * 
	 * @throws Exception
	 */
	public void setDatabaseType(DatabaseType databaseType);

	/**
	 * 取得连接池的驱动名称
	 * 
	 * @throws Exception
	 */
	public String getDriverName();

	/**
	 * 设置连接池的驱动名称
	 * 
	 * @throws Exception
	 */
	public void setDriverName(String driverName);

	/**
	 * 取得JDBC的URL
	 * 
	 * @throws Exception
	 */
	public String getJdbcURL();

	/**
	 * 设置JDBC的URL
	 * 
	 * @throws Exception
	 */
	public void setJdbcURL(String jdbcURL);

	/**
	 * 取得连接池的别名
	 * 
	 * @throws Exception
	 */
	public String getPoolName();

	/**
	 * 设置连接池的别名
	 * 
	 * @throws Exception
	 */
	public void setPoolName(String poolName);

	/**
	 * 取得连接池连接数据库的用户名
	 * 
	 * @throws Exception
	 */
	public String getUserName();

	/**
	 * 设置连接池连接数据库的用户名
	 * 
	 * @throws Exception
	 */
	public void setUserName(String userName);

	/**
	 * 取得连接池连接数据库的密码
	 * 
	 * @throws Exception
	 */
	public String getPassword();

	/**
	 * 设置连接池连接数据库的密码
	 * 
	 * @throws Exception
	 */
	public void setPassword(String password);

	/**
	 * 取得连接池的最小连接数
	 * 
	 * @throws Exception
	 */
	public int getMinPool();

	/**
	 * 设置连接池的最小连接数
	 * 
	 * @throws Exception
	 */
	public void setMinPool(int minPool);

	/**
	 * 取得连接池的最大连接数
	 * 
	 * @throws Exception
	 */
	public int getMaxPool();

	/**
	 * 设置连接池的最大连接数
	 * 
	 * @throws Exception
	 */
	public void setMaxPool(int maxPool);

	/**
	 * 取得连接池的默认连接数
	 * 
	 * @throws Exception
	 */
	public int getInitPool();

	/**
	 * 设置连接池的默认连接数
	 * 
	 * @throws Exception
	 */
	public void setInitPool(int initPool);

	/**
	 * 取得连接池的正在使用的连接个数
	 * 
	 */
	public int getBusyPool();

	public enum DatabaseType {
		/**
		 * oracle database
		 */
		ORACLE,

		/**
		 * mysql database
		 */
		MYSQL,

		/**
		 * sqlserver database
		 */
		SQLSERVER,

		/**
		 * db2 database
		 */
		DB2
	}
}
